package core.reports;

import core.ItemManager;
import core.ProductGroup;
import core.ProductManager;
import core.StorageUnit;

/**
 * This interface will define the methods that the various 
 * report 'visitors' will need to implement in order to get
 * the necessary data to create the reports.
 *
 */
public interface IVisitor 
{
	/**
	 * When 'visiting' a productGroup this method will be called
	 * by the different visitors.
	 * @param pg the product group to visit
	 * @param order The order that the tree is being traversed
	 * @return true if the visiting was successful
	 */
	public boolean visitProductGroup(ProductGroup pg, TraversalOrder order);
	
	/**
	 * When 'visiting' a StorageUnit this method will be called
	 * by the different visitors.
	 * @param su the storageUnit to visit
	 * @param order The order that the tree is being traversed
	 * @return true if the visiting was successful
	 */
	public boolean visitStorageUnit(StorageUnit su, TraversalOrder order);
	
	/*
	 * When 'visiting' the ProductManager this method will be called
	 * by the different visitors.
	 * @param pm the productManager
	 * @return true if the visiting was successful
	 */
	//public boolean visitProductManager(ProductManager pm);
	
	/*
	 * When 'visiting' the ItemManager this method will be called
	 * by the different visitors.
	 * @param im the ItemManager
	 * @return true if the visiting was successful
	 */
	//public boolean visitItemManager(ItemManager im);
}
